package org.egame.net
{
	import com.adobe.serialization.json.JSON;
	
	/**
	 * json格式的网络包,用于NetClient发送
	 */ 
	public class JSONPackage
	{
		private		var _obj:Object = new Object();
		
		/**
		 * 构造网络包
		 * @param type 网络包的类型
		 */ 
		public function JSONPackage(type:int)
		{
			_obj["type"] = type;
		}
		
		/**
		 * 设置内部obj对象.用于收到网络包时，将obj放入JSONPackage
		 */ 
		public	function	setInnerObj(obj:Object):void
		{
			_obj = obj;
		}
		
		/**
		 * 获得底层的object对象
		 */ 
		public	function	getInnerObj():Object
		{
			return _obj;
		}
		
		/**
		 * 返回网络包的类型
		 */ 
		public	function	getType():int
		{
			return _obj["type"];
		}
		
		/**
		 * put一个int类型的值
		 */ 
		public	function	putInt(key:String, value:int):void
		{
			_obj[key] = value;
		}
		
		/**
		 * 根据key值返回Int类型的value
		 */ 
		public	function	getInt(key:String):int
		{
			return _obj[key];
		}
		
		/**
		 * put一个string类型的值
		 */ 
		public	function	putString(key:String, value:String):void
		{
			_obj[key] = value;
		}
		
		/**
		 * 根据key值返回String类型的value
		 */ 
		public	function	getString(key:String):String
		{
			return _obj[key];
		}
		
		/**
		 * 返回long类型的变量,作为字符串返回
		 */ 
		public	function	getLong(key:String):String{
			var value:String = this.getString(key);
			return value;
		}
		
		/**
		 * put一个Boolean类型的值
		 */ 
		public	function	putBoolean(key:String, value:Boolean):void{
			var str:String = value?"true":"false";
			this.putString(key, str);
		}
		
		/**
		 * 返回一个Boolean类型的value
		 */ 
		public	function	getBoolean(key:String):Boolean{
			var str:String = this.getString(key);
			if (str=="true")
				return true;
			else
				return false;	
		}
		
		
		/**
		 * put一个number类型的值
		 */ 
		public	function	putNumber(key:String, value:Number):void{
			var str:String = value.toString();
			this.putString(key, str);
		}
		
		/**
		 * 返回一个Number类型的值
		 */ 
		public	function	getNumber(key:String):Number{
			var str:String = this.getString(key);
			var value:Number = Number(str);
			return value;
		}
		
		/**
		 * 将网络包转换成字符串
		 */ 
		public	function	toString():String
		{
			return JSON.encode(_obj);
		}
		
		/**
		 * 设置压缩标志，底层发送此网络包实例时，会先对数据进行压缩
		 */ 
		public function	setCompress():void
		{
			_obj["byte_prefix"] = 1; 
		}
		
		/**
		 * 设置加密标志，底层发送此网络包实例时，会对数据进行加密
		 */ 
		public	function	setEncrypt():void
		{
			_obj["byte_prefix"] = 2;
		}
	}
}